package com.it.common.utils

import android.app.Service
import android.content.Context
import android.media.AudioManager
import kotlin.math.roundToInt


/**
 *  @Description：系统声音控制相关工具类
 *  @author：weishixiong
 *  @date：2023/3/20 13:32
 *
 */
object SoundUtils {
    const val TAG = "SoundUtils"

    /**
     * 设置某个音频的音量
     * @param context Context
     * @param volume Int 音量值
     * @param streamType Int 音频类型
     */
    private fun setVolume(context: Context, volume: Int, streamType: Int) {
        val audioManager = context.getSystemService(Service.AUDIO_SERVICE) as AudioManager
        audioManager.setStreamVolume(
            streamType, volume, AudioManager.FLAG_PLAY_SOUND or AudioManager.FLAG_SHOW_UI
        )
    }

    /**
     * 获取某个音频的音量
     * @param context Context
     * @param streamType Int 音频类型
     * @return Int音量值
     */
    private fun getVolume(context: Context, streamType: Int): Int {
        val audioManager = context.getSystemService(Service.AUDIO_SERVICE) as AudioManager
        return audioManager.getStreamVolume(streamType)
    }

    /**
     * 获取某个音频的最大音量
     * @param context Context
     * @param streamType Int音频类型
     * @return Int 最大音量值
     */
    private fun getMaxVolume(context: Context, streamType: Int): Int {
        val audioManager = context.getSystemService(Service.AUDIO_SERVICE) as AudioManager
        return audioManager.getStreamMaxVolume(streamType)
    }

    /**
     * 通过百分比设置音频的音量
     * @param context Context
     * @param percentValue Int 百分比0-100
     * @param streamType Int 音频类型
     */
    fun setVolumePercent(context: Context, percentValue: Int, streamType: Int) {
        //最大声音
        val maxVolume = getMaxVolume(context, streamType).toDouble()
        //百分比
        val percent = percentValue * 0.01
        //最终要设置的音量
        val finalVolume = (maxVolume * percent).roundToInt()
        //设置音量
        setVolume(context, finalVolume, streamType)
    }

    /**
     * 获取当前音量的百分比
     * @param context Context
     * @param streamType Int
     * @return Int
     */
    fun getVolumePercent(context: Context, streamType: Int): Int {
        val volume = getVolume(context, streamType).toDouble()
        val maxVolume = getMaxVolume(context, streamType).toDouble()
        return ((volume / maxVolume * 100)).roundToInt()
    }

}